﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using Apa.Control;
using Apa.Data;
namespace Apa.Forms
{
    public partial class frmCrearUsuario : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            if (!IsPostBack)
            {
                //Llenar el checkbox del modulo 1
                Controladora control = new Controladora();
                List<tblLicencia> licencia = Session["Licencia"] as List<tblLicencia>;
                
                tblUsuario usuario = Session["Usuario"] as tblUsuario;
                List<tblComponentesxModulo> modulo1 = control.consultarModulos("REGISTRO CALIFICADO", usuario.id);
                Session.Add("checkModulo1", modulo1);

                //modulo2
                List<tblComponentesxModulo> modulo2 = control.consultarModulos("ALTA CALIDAD", usuario.id);
                Session.Add("checkModulo2", modulo2);


                //Llenar la grilla
                int idPrograma = licencia.First().idPrograma;
                List<tblUsuario> usuarios = control.consultarUsuarios(idPrograma).Where(x => x.tipo == "Comun").ToList();
                //List<tblUsuario> usuarios = control.consultarUsuarios(idPrograma).ToList();



                gvUsuarios.DataSource = usuarios;
                gvUsuarios.DataBind();



                if (licencia == null)
                {
                    //Response.Redirect("Login.aspx"); mejor  un alert();

                }
                else
                {



                    tblPrograma programa = control.consultarPrograma(idPrograma);
                    tbPrograma.Text = programa.nombre;
                }
            }
            else
            {
                Controladora control = new Controladora();
                List<tblLicencia> licencia = Session["Licencia"] as List<tblLicencia>;


                int idPrograma = licencia.First().idPrograma;
                List<tblUsuario> usuarios = control.consultarUsuarios(idPrograma).Where(x => x.tipo == "Comun").ToList();
                //List<tblUsuario> usuarios = control.consultarUsuarios(idPrograma).ToList();

                gvUsuarios.DataSource = usuarios;
                gvUsuarios.DataBind();
            }
        }

        protected void btEliminar_Click(object sender, EventArgs e)
        {

            Controladora control = new Controladora();
            try
            {
                tblUsuario usuario = control.consultarUsuario(tbNombreUsuario.Text);
              bool eliminar=  control.eliminarUsuario(usuario.id);
              if (eliminar)
              {
                  Page.ClientScript.RegisterStartupScript(this.GetType(), "script", "alert('El usuario se ha eliminado exitosamente');", true);
                  List<tblLicencia> licencia = Session["Licencia"] as List<tblLicencia>;


                  int idPrograma = licencia.First().idPrograma;
                  List<tblUsuario> usuarios = control.consultarUsuarios(idPrograma).Where(x => x.tipo == "Comun").ToList();
                  //List<tblUsuario> usuarios = control.consultarUsuarios(idPrograma).ToList();

                  gvUsuarios.DataSource = usuarios;
                  gvUsuarios.DataBind();

                  tbNombreUsuario.Text = "";
                  tbContrasena.Text = "";
                  tbConfirmarContrasena.Text = "";
                  //tbContacto.Text = "";
              }
              else
              {
                  Page.ClientScript.RegisterStartupScript(this.GetType(), "script", "alert('Asegurese de eliminar un usuario valido');", true);
                  
              }

            }
            catch (Exception)
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "script", "alert('Asegurese de eliminar un usuario valido');", true);

            }
        }

        protected void btAgregar_Click(object sender, EventArgs e)
        {
              List<tblComponentesxModulo> modulo1 =Session["checkModulo1"] as List<tblComponentesxModulo>;
              List<tblComponentesxModulo> modulo2 = Session["checkModulo2"] as List<tblComponentesxModulo>;

              if (modulo1.Count == 0 && modulo2.Count == 0)
            {
                tbNombreUsuario.Text = "";
                Page.ClientScript.RegisterStartupScript(this.GetType(), "script", "alert('No es posible crear un usuario porque su licencia ha expirado');", true);
                return;

            }


            tblLicencia licenciaFirst = (Session["Licencia"] as List<tblLicencia>).First();
            
            Controladora control = new Controladora();

               int ?cantidadUser= control.consultarPrograma(licenciaFirst.idPrograma).cantidadUsuarios ;

            if (gvUsuarios.Rows.Count+1 <=cantidadUser)
            {
                if (tbContrasena.Text == tbConfirmarContrasena.Text)
                {
                     control = new Controladora();
                    tblUsuario user = control.consultarUsuario(tbNombreUsuario.Text);

                    if (user == null)
                    {
                        tblUsuario userActual = Session["Usuario"] as tblUsuario;
                        bool inserta = control.insertarUsuario(tbNombreUsuario.Text, userActual.nombre, tbContrasena.Text, "Comun");

                        List<tblLicencia> licencia = Session["Licencia"] as List<tblLicencia>;
                        user = control.consultarUsuario(tbNombreUsuario.Text);
                        int idPrograma = licencia.First().idPrograma;

                        //  int idModulo = int.Parse(Session["idModulo"] as string);
                        //  int idusuarioActual = int.Parse(Session["idUsuario"] as string);

                        if (inserta)
                        {
                            bool insertLicencia = false;
                            DateTime fecha = DateTime.Now;
                            foreach (tblLicencia lic in licencia)
                            {

                                insertLicencia = control.insertarLicenciaUsuario(lic.idPrograma, lic.idModulo, user.id, lic.fechaVigIni, lic.fechaVigFin, userActual.nombre);
                            }


                            List<tblUsuario> usuarios = control.consultarUsuarios(idPrograma).Where(x => x.tipo == "Comun").ToList();

                            gvUsuarios.DataSource = usuarios;
                            gvUsuarios.DataBind();

                            tbNombreUsuario.Text = "";
                            tbContrasena.Text = "";
                            tbConfirmarContrasena.Text = "";
                            //tbContacto.Text = "";

                            Page.ClientScript.RegisterStartupScript(this.GetType(), "script", "alert('Usuario registrado correctamente');", true);


                        }
                        else
                        {

                            Page.ClientScript.RegisterStartupScript(this.GetType(), "script", "alert('Error al registrar el usuario');", true);

                        }

                    }
                    else
                    {

                        Page.ClientScript.RegisterStartupScript(this.GetType(), "script", "alert('No se puede crear este usuario porque ya existe en el sistema');", true);
                    }
                }
                else
                {

                    Page.ClientScript.RegisterStartupScript(this.GetType(), "script", "alert('La contraseña no coincide con confirmar contraseña');", true);
                }

            }
            else
            {

                Page.ClientScript.RegisterStartupScript(this.GetType(), "script", "alert('ya ha creado el número maximo de usuarios permitidos');", true);
                tbNombreUsuario.Text = "";
                tbConfirmarContrasena.Text = "";
                tbContrasena.Text = "";
            }

        }

        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                Controladora control = new Controladora();
               
                string nombreUsuario = (e.Row.Cells[1].FindControl("nombre") as Label).Text;
                tblUsuario usuario = control.consultarUsuario(nombreUsuario);

                List<tblComponentesxModulo> table = control.consultarModulosxComponentesXUsuario("REGISTRO CALIFICADO", usuario.id);
                
                    
               // List<tblComponentesxModulo> table = Session["checkModulo1"] as List<tblComponentesxModulo>;
                

                CheckBoxList checkbox = new CheckBoxList();
                checkbox.ID = "chkRegCal";
                checkbox.EnableViewState = true;

                //checkbox.DataSource = table;
                //checkbox.DataTextField = "nombre";
                //checkbox.DataValueField = "nombre";
                //checkbox.DataBind();

                foreach (tblComponentesxModulo item in table)
                {
                    ListItem item2 = new ListItem(item.nombre, item.id.ToString(), true);
                    checkbox.Items.Add(item2);
                    checkbox.Items.FindByValue(item.id.ToString()).Selected = item.activo == 1 ? true : false;
                  //  checkbox.Items.FindByValue(item.id.ToString()).Enabled = true;
                   
                }
                e.Row.Cells[2].Controls.Add(checkbox);


                //table = Session["checkModulo2"] as List<tblComponentesxModulo>;
                table = control.consultarModulosxComponentesXUsuario("ALTA CALIDAD", usuario.id);
                checkbox = new CheckBoxList();
                checkbox.ID = "chkAltCal";
                //checkbox.EnableViewState = true;

                //checkbox.DataSource = table;
                //checkbox.DataTextField = "nombre";
                //checkbox.DataValueField = "nombre";
                //checkbox.DataBind();

                foreach (tblComponentesxModulo item in table)
                {
                    ListItem item2 = new ListItem(item.nombre, item.id.ToString(), true);
                    checkbox.Items.Add(item2);
                    checkbox.Items.FindByValue(item.id.ToString()).Selected = item.activo == 1 ? true : false;
                   // checkbox.Items.FindByValue(item.id.ToString()).Enabled = true;
                }

                e.Row.Cells[3].Controls.Add(checkbox);



                // table = Session["checkModulo3"] as DataTable;
                //checkbox = new CheckBoxList();
                //checkbox.EnableViewState = true;

                //checkbox.DataSource = table;
                //checkbox.DataTextField = "Modulo3";
                //checkbox.DataValueField = "Modulo3";
                //checkbox.DataBind();
                //e.Row.Cells[4].Controls.Add(checkbox);


                //checkBox.Attributes.Add("onclick", "HighlightRow(this);");

                //if (checkBox.Checked)
                //{

                //    e.Row.BackColor = Color.FromName("#F0EEE9");
                //    //e.Row.Cells[2].BackColor = Color.FromName("#c6efce");

                //}
                //else
                //{

                //    e.Row.BackColor = Color.FromName("white");

                //}
            }

        }

        protected void btGuardar_Click(object sender, EventArgs e)
        {
            GridViewRowCollection filas = gvUsuarios.Rows;
            Controladora control = new Controladora();
            foreach (GridViewRow row in filas)
            {

                Label lbUsuario = row.Cells[1].FindControl("nombre") as Label;

                tblUsuario usuario = control.consultarUsuario(lbUsuario.Text);

                try
                {
                    CheckBoxList checkBoxReg = row.Cells[2].FindControl("chkRegCal") as CheckBoxList;
                    DateTime fecha=DateTime.Now;
                    foreach (ListItem itemActual in checkBoxReg.Items)
                    {
 
                        int estado = itemActual.Selected?1:0;
                        string idComponente = itemActual.Value;
                        string nombreComponente = itemActual.Text;
                        control.actualizarUsuarioComponente(usuario.id, int.Parse(idComponente), estado, fecha);
 
                     }

                 

                }
                catch (Exception)
                {

                }


                try
                {
                    
                    CheckBoxList checkBoxAlt = row.Cells[3].FindControl("chkAltCal") as CheckBoxList;
                    DateTime fecha = DateTime.Now;
                    foreach (ListItem itemActual in checkBoxAlt.Items)
                    {

                        int estado = itemActual.Selected ? 1 : 0;
                        string idComponente = itemActual.Value;
                        string nombreComponente = itemActual.Text;
                        control.actualizarUsuarioComponente(usuario.id, int.Parse(idComponente), estado, fecha);

                    }


                }
                catch (Exception)
                {

                }

                Page.ClientScript.RegisterStartupScript(this.GetType(), "script", "alert('Se ha otorgado los permisos al usuario!');", true);

                tbNombreUsuario.Text = "";
                tbContrasena.Text = "";
                tbConfirmarContrasena.Text = "";
                //tbContacto.Text = "";


            }
        }
    }
}
